package com.jiyongjun.component.annotation;

import com.jiyongjun.component.enums.LogApiTypeEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <h2>用于描述接口方法信息。可以放在接口方法上，也可以放在接口实现方法上。实现类的优先级大于接口的优先级。</h2>
 * <h3>描述：</h3>
 *
 * @author yongjun.jyj
 * @since 2022/6/13 14:20
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ApiMethodMetadata {
    /** 方法描述 */
    String desc();

    String apiName() default "";

    /** 接口类型，会自动判断，一般不需要显式指定。
     * @see LogApiTypeEnum
     */
    String apiType() default "";

    boolean autoValidateArgs() default true;

    Class<?>[] argGroup() default {};

    boolean logArgs() default true;

    /** 是否打印出参日志 */
    boolean logResult() default true;

    /** 服务异常默认提示语 */
    String serviceExceptionMsg() default "系统繁忙，请稍后重试~";

    /** 扩展字段，会记录到日志里 */
    String ext() default "";
}
